package com.foreknow.demo8;

import java.util.*;

/**
 * Set无序集合，不能有重复元素
 *
 * 练习
 * 1. 有十万个数据，找到第一个重复的数据
 *    我们可以将list中的数据一个一个放入到set集合中，如果没set集合中没有这个数据，就入到set集合中，
 *    如果set集合中包含了这个数据，就输出这个数据,然后break
 * 2. 有十万个数据，去掉所有重复的数据
 * 3. 给定一个非空的整数数组，除了某个元素只出现一次以外，其余的每个元素均出现两次。找出那个只出现了一次的元素
 *    输入：【2，2，1】 输出：1   输入：【4，1，2，1，2】 输出 4
 */
public class SetDemo {

    public int single(int[] array) {
        Set<Integer> set = new HashSet<>();
        for(int i = 0;i<array.length;i++) {
            //判断set集合中如果包含数组中的某个元素就调用set中的remove方法
            if(set.contains(array[i])) {
                set.remove(array[i]);
            }else {
                set.add(array[i]);
            }
        }
        for(int i = 0;i<array.length;i++) {
            if(set.contains(array[i])) {
                return array[i];
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        SetDemo setDemo = new SetDemo();
        int[] array = {2,2,1};
        int num = setDemo.single(array);
        System.out.println(num);

//        List<Integer> list = new ArrayList<>();
//        Random random = new Random();
//        for (int i = 0;i<10;i++){
//            list.add(random.nextInt(10));
//        }
//        System.out.println(list);
//
//        Set<Integer> set = new HashSet<>();
//        for(int i = 0;i<list.size();i++) {
//            if(set.contains(list.get(i))){
//                System.out.println(list.get(i));
//                break;
//            }else {
//                set.add(list.get(i));
//            }
//        }







        //创建一个Set集合
        //        Set<String> set = new HashSet<>();
        //        //Set<String> set = new TreeSet<>();
        //        //向集合中添加数据
        //        set.add("A");
        //        set.add("B");
        //        set.add("B");
        //        set.add("C");
        //        set.add("D");
        //        //set.add(1);
        //        //可以使用迭代器遍历set集合
        //        Iterator it = set.iterator();
        //        while (it.hasNext()){
        //            System.out.println(it.next());
        //        }
    }
}
